package com.hellowx.qydcdev.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hellowx.qydcdev.entity.OrderPay;
import com.hellowx.qydcdev.entity.OrderVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 订单表(OrderPay)表数据库访问层
 *
 * @author hellowx
 * @since 2022-01-10 14:10:53
 */
public interface OrderPayDao extends BaseMapper<OrderPay> {

    /**
     * 查询订单信息
     * @param customerId 顾客id
     * @return list
     */
    List<OrderVO> selectOrderVOByCustomerList(@Param("customerId") Long customerId,
                                              @Param("orderId") Long orderId,
                                              @Param("businessId") Long businessId);

    /**
     * 统计各类订单总数
     * @param businessId businessId
     * @return list
     */
    List<Map<String, Object>> countVariousOrders(@Param("businessId") Long businessId);

    /**
     * 按月统计订单数量,及订单金额
     * @param businessId 店铺 id
     * @param dateStr 日期字符串   yyyy-MM
     * @return map
     */
    Map<String, Object> countOrderByMonth(@Param("businessId") Long businessId,
                                                @Param("dateStr") String dateStr);

    /**
     * 按日统计订单数量,及订单金额
     * @param businessId 店铺 id
     * @param dateStr 日期字符串   yyyy-MM-dd
     * @return map
     */
    Map<String, Object> countOrderByDay(@Param("businessId") Long businessId,
                                        @Param("dateStr") String dateStr);

    /**
     * 按月统计销量前8的订单商品
     * @param businessId 店铺id:如果为null,则默认查询全部的数量
     * @param dateStr 日期字符串  yyyy-DD
     * @return list
     */
    List<Map<String, Object>> countOrderGoodsTop8(@Param("businessId") Long businessId,
                                                  @Param("dateStr") String dateStr);

    /**
     * 统计该商品的月销售量
     * @param goodsId 商品id
     * @param dateStr 日期字符串
     * @return list
     */
    Map<String, Object> countGoodsMonthlySales(@Param("goodsId") Long goodsId,
                                               @Param("dateStr") String dateStr);

    /**
     * 统计该店铺当月的总月销量
     * @param businessId 店铺id
     * @param dateStr 日期字符串  yyyy-MM
     * @return map
     */
    Map<String, Object> countOrderGoodsByMonthAndBusinessId(@Param("businessId") Long businessId, @Param("dateStr") String dateStr);
}

